CouchDB একটি ওপেন সোর্স NoSQL ডাটাবেস যা ডকুমেন্ট-ভিত্তিক (Document-Oriented) ডেটা মডেল ব্যবহার করে এবং এটি JSON ফরম্যাটে ডেটা সংরক্ষণ করে। CouchDB-এর মৌলিক ধারণাগুলো বেশ কিছু গুরুত্বপূর্ণ বৈশিষ্ট্য নিয়ে গঠিত, যা ডেটা সংরক্ষণ, ম্যানেজমেন্ট, রেপ্লিকেশন এবং সিঙ্ক্রোনাইজেশনের ক্ষেত্রে সাহায্য করে।
CouchDB ডেটা ডকুমেন্ট আকারে সংরক্ষণ করে, যা JSON (JavaScript Object Notation) ফরম্যাটে থাকে। প্রতিটি ডকুমেন্ট একটি key-value pair ধারণ করে, যেখানে key ডেটার নাম এবং value সেই ডেটার মান।
উদাহরণ:
{
"_id": "user123",
"_rev": "1-abc123",
"name": "John Doe",
"email": "johndoe@example.com",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Cityville"
}
}
CouchDB একটি স্কিমা-লেস ডাটাবেস, যা মানে হল যে ডেটার কাঠামো বা ফরম্যাট আগেই নির্ধারণ করতে হয় না। প্রতিটি ডকুমেন্ট আলাদা হতে পারে এবং একে অপরের থেকে ভিন্ন ডেটা ধারণ করতে পারে। এর ফলে ডেটার কাঠামো সহজেই পরিবর্তন করা যায় এবং নতুন ফিল্ড বা স্ট্রাকচার যোগ করা সম্ভব।
CouchDB MVCC (Multi-Version Concurrency Control) ব্যবহার করে, যা একাধিক ব্যবহারকারী একই ডকুমেন্ট সম্পাদনা করার সময় কনফ্লিক্ট প্রতিরোধ করে। CouchDB প্রতিটি ডকুমেন্টের রিভিশন ট্র্যাক করে এবং একাধিক সংস্করণ ধারণ করে, যা কনফ্লিক্ট ম্যানেজমেন্টের জন্য অত্যন্ত কার্যকর।
CouchDB একটি শক্তিশালী মাল্টি-মাস্টার রেপ্লিকেশন সিস্টেম সমর্থন করে, যা একাধিক সার্ভারের মধ্যে ডেটা সিঙ্ক্রোনাইজ করতে সক্ষম। রেপ্লিকেশন CouchDB এর একটি প্রধান বৈশিষ্ট্য এবং এটি খুবই কার্যকর যখন ডেটা ডিস্ট্রিবিউটেড সিস্টেমে সিঙ্ক্রোনাইজ করতে হয়।
CouchDB এর রেপ্লিকেশন সিস্টেম eventual consistency অনুসরণ করে, অর্থাৎ কিছু সময় পর সমস্ত সার্ভারে ডেটা সিঙ্ক্রোনাইজ হয়ে যায়।
CouchDB কুয়েরি করার জন্য MapReduce প্যাটার্ন ব্যবহার করে। Map function ডেটার থেকে key-value pairs তৈরি করে, এবং Reduce function সেই key-value পেয়ারগুলো প্রক্রিয়া করে এবং সংক্ষেপিত ফলাফল প্রদান করে।
CouchDB RESTful API ব্যবহার করে ডেটা পরিচালনা করা যায়। CouchDB এর API HTTP প্রোটোকল ব্যবহার করে এবং এটি CRUD (Create, Read, Update, Delete) অপারেশন সম্পাদন করতে সাহায্য করে।
CouchDB ব্যবহারকারীদের Role-based Access Control (RBAC) এবং Authentication সিস্টেম প্রদান করে, যা ডেটাবেস এবং ডকুমেন্টের নিরাপত্তা নিশ্চিত করে।
CouchDB একটি ডিস্ট্রিবিউটেড ডাটাবেস যা সার্ভার এবং ক্লায়েন্টের মধ্যে RESTful API ব্যবহার করে যোগাযোগ করে। এর মূল কাজের পদ্ধতি হল:
CouchDB একটি শক্তিশালী, ডিস্ট্রিবিউটেড, এবং স্কেলেবল ডাটাবেস সিস্টেম যা JSON ডকুমেন্ট ভিত্তিক স্টোরেজ এবং MapReduce কুয়েরি পদ্ধতি ব্যবহার করে ডেটা অ্যাক্সেস ও বিশ্লেষণ সহজ করে তোলে।
CouchDB একটি Document-Oriented NoSQL Database যা ডেটা JSON ফরম্যাটে ডকুমেন্ট আকারে সংরক্ষণ করে। এটি একটি ডিস্ট্রিবিউটেড এবং স্কেলেবল ডাটাবেস, যা ডেটাকে সহজে সঞ্চয়, বিশ্লেষণ এবং পরিচালনা করতে সহায়ক। এখানে আমরা CouchDB Database, Document, এবং JSON এর সম্পর্ক এবং তাদের কাজ করার পদ্ধতি নিয়ে বিস্তারিত আলোচনা করব।
CouchDB Database হল সেই পরিবেশ যেখানে Documents সংরক্ষণ করা হয়। একটি CouchDB ডাটাবেস একটি অসংখ্য ডকুমেন্ট ধারণ করতে পারে, এবং প্রতিটি ডকুমেন্টের মধ্যে থাকা ডেটা JSON ফরম্যাটে সংরক্ষিত হয়।
Document হল CouchDB তে ডেটা সংরক্ষণের মৌলিক একক। প্রতিটি ডকুমেন্টের নিজস্ব একটি _id (অন্যতম পরিচিতি) এবং _rev (রিভিশন নম্বর) থাকে। এটি JSON ফরম্যাটে সংরক্ষিত থাকে, যেখানে ডকুমেন্টের মধ্যে থাকা ডেটা একটি key-value pair হিসেবে থাকে। ডকুমেন্টের মধ্যে থাকা key-value পেয়ারগুলো যে কোন ধরনের তথ্য ধারণ করতে পারে যেমন নাম, ঠিকানা, ইমেইল, বা অন্যান্য স্ট্রাকচার্ড বা আনস্ট্রাকচার্ড ডেটা।
_id
একটি অনন্য চিহ্ন এবং এটি ডকুমেন্টটি চিহ্নিত করতে ব্যবহৃত হয়।উদাহরণ:
{
"_id": "12345",
"_rev": "1-2345",
"name": "John Doe",
"email": "john.doe@example.com",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Springfield",
"zip": "12345"
}
}
উপরে দেখানো JSON ডকুমেন্টে:
JSON (JavaScript Object Notation) হলো একটি হালকা, পাঠযোগ্য ডেটা বিনিময় ফরম্যাট যা সি, সি++, পাইটন, জাভা, জাভাস্ক্রিপ্ট সহ অধিকাংশ প্রোগ্রামিং ভাষায় সমর্থিত। CouchDB ডেটাকে JSON ফরম্যাটে সংরক্ষণ করে, যা ডকুমেন্টগুলোকে একটি নির্দিষ্ট কাঠামোতে সহজে সংরক্ষণ, আদান-প্রদান এবং বিশ্লেষণ করতে সহায়ক।
JSON এর উদাহরণ:
{
"name": "Alice",
"age": 25,
"isStudent": true,
"address": {
"city": "New York",
"zipCode": "10001"
},
"hobbies": ["reading", "travelling", "coding"]
}
এই JSON ডেটাতে:
CouchDB একটি শক্তিশালী, Document-Oriented NoSQL Database যা ডেটাকে JSON ফরম্যাটে Document আকারে সংরক্ষণ করে। এই ডেটা স্টোরেজ পদ্ধতি CouchDB কে একটি নমনীয়, স্কেলেবেল এবং দ্রুত ডেটা অ্যাক্সেসের জন্য উপযুক্ত ডাটাবেস সিস্টেম হিসেবে তৈরি করে। JSON ফরম্যাটে ডেটা সংরক্ষণ করার কারণে CouchDB বিভিন্ন ধরনের ডেটা স্ট্রাকচার এবং অ্যাপ্লিকেশনগুলির সাথে সহজে কাজ করতে পারে।
CouchDB একটি RESTful API প্রদান করে, যা HTTP প্রোটোকলের মাধ্যমে ডেটাবেসের সাথে যোগাযোগ এবং ডেটা ম্যানিপুলেশন করতে সক্ষম। REST API ব্যবহার করে আপনি CRUD (Create, Read, Update, Delete) অপারেশনগুলি সম্পাদন করতে পারবেন, এবং CouchDB এর বিভিন্ন ফিচার যেমন ডকুমেন্ট ম্যানেজমেন্ট, কুয়েরি, রেপ্লিকেশন এবং আরও অনেক কিছু পরিচালনা করা যাবে।
CouchDB এর REST API একটি JSON ভিত্তিক API, যা HTTP রিকুয়েস্ট (GET, PUT, POST, DELETE) ব্যবহার করে যোগাযোগ করে। CouchDB এ প্রতিটি ডেটাবেস এবং ডকুমেন্টের সাথে যোগাযোগ HTTP রিকুয়েস্টের মাধ্যমে ঘটে।
Create a Database
নতুন একটি ডেটাবেস তৈরি করতে PUT রিকুয়েস্ট পাঠাতে হবে।
PUT /{db_name}
উদাহরণ:
PUT /mydatabase
List Databases
সকল ডেটাবেসের তালিকা পেতে GET রিকুয়েস্ট পাঠাতে হবে।
GET /_all_dbs
এটি সকল ডেটাবেসের নামের একটি অ্যারে প্রদান করবে।
Delete a Database
একটি ডেটাবেস মুছে ফেলতে DELETE রিকুয়েস্ট পাঠাতে হবে।
DELETE /{db_name}
উদাহরণ:
DELETE /mydatabase
Create a Document
একটি নতুন ডকুমেন্ট তৈরি করতে POST রিকুয়েস্ট পাঠাতে হবে, এবং ডেটা JSON ফরম্যাটে পাঠাতে হবে।
POST /{db_name}
উদাহরণ:
POST /mydatabase
{
"name": "John Doe",
"age": 30
}
Read a Document
একটি নির্দিষ্ট ডকুমেন্ট পড়তে GET রিকুয়েস্ট পাঠাতে হবে, যেখানে ডকুমেন্টের _id প্রদান করতে হবে।
GET /{db_name}/{doc_id}
উদাহরণ:
GET /mydatabase/12345
Update a Document
একটি ডকুমেন্ট আপডেট করতে PUT রিকুয়েস্ট পাঠাতে হবে এবং ডকুমেন্টের _id এবং _rev প্রদান করতে হবে।
PUT /{db_name}/{doc_id}
উদাহরণ:
PUT /mydatabase/12345
{
"_rev": "1-abc",
"name": "Jane Doe",
"age": 32
}
Delete a Document
একটি ডকুমেন্ট মুছে ফেলতে DELETE রিকুয়েস্ট পাঠাতে হবে এবং _rev প্রদান করতে হবে।
DELETE /{db_name}/{doc_id}?rev={rev_id}
উদাহরণ:
DELETE /mydatabase/12345?rev=1-abc
List Views
একটি ডেটাবেসের সমস্ত ভিউ দেখতে GET রিকুয়েস্ট পাঠাতে হবে।
GET /{db_name}/_design/{design_doc}/_view/{view_name}
উদাহরণ:
GET /mydatabase/_design/design_doc/_view/view_name
Query Views
কাস্টম কুয়েরি তৈরি করতে, আপনি MapReduce এর মাধ্যমে views তৈরি এবং কুয়েরি করতে পারেন।
GET /{db_name}/_design/{design_doc}/_view/{view_name}?key={key_value}
উদাহরণ:
GET /mydatabase/_design/design_doc/_view/view_name?key="John Doe"
Start Replication
CouchDB রেপ্লিকেশন শুরু করতে POST রিকুয়েস্ট পাঠাতে হবে।
POST /_replicate
উদাহরণ:
POST /_replicate
{
"source": "source_db",
"target": "target_db"
}
Track Changes in a Database
CouchDB একটি _changes এন্ডপয়েন্ট প্রদান করে, যা ডেটাবেসে হওয়া পরিবর্তনগুলোর একটি ফিড প্রদান করে।
GET /{db_name}/_changes
উদাহরণ:
GET /mydatabase/_changes
PUT /mydatabase
POST /mydatabase
{
"name": "Alice",
"age": 25
}
GET /mydatabase/1a2b3c4d
PUT /mydatabase/1a2b3c4d
{
"_rev": "1-xyz",
"name": "Alice",
"age": 26
}
DELETE /mydatabase/1a2b3c4d?rev=1-xyz
CouchDB REST API একটি শক্তিশালী ও নমনীয় সমাধান প্রদান করে, যা ডেটাবেস ম্যানেজমেন্ট, ডেটা রেপ্লিকেশন, এবং কুয়েরি অপারেশন সহজে করতে সক্ষম।
CouchDB একটি RESTful API প্রদান করে, যার মাধ্যমে HTTP প্রোটোকল ব্যবহার করে ডেটাবেস এবং ডকুমেন্ট তৈরি করা যায়। এই API-র মাধ্যমে আপনি HTTP রিকুয়েস্ট পাঠিয়ে ডেটাবেস পরিচালনা করতে পারেন, যেমন নতুন ডেটাবেস তৈরি, ডকুমেন্ট তৈরি, আপডেট এবং ডিলিট করা।
CouchDB API ব্যবহার করে নতুন ডেটাবেস তৈরি করা খুবই সহজ। একটি HTTP PUT
রিকুয়েস্ট পাঠিয়ে নতুন ডেটাবেস তৈরি করা হয়।
http://<server_ip>:<port>/<db_name>
PUT
ধরা যাক আপনি একটি নতুন ডেটাবেস তৈরি করতে চান যার নাম mydatabase
।
curl -X PUT http://127.0.0.1:5984/mydatabase
এটি আপনার CouchDB সার্ভারে নতুন ডেটাবেস mydatabase
তৈরি করবে। যদি সফল হয়, আপনি এই ধরনের একটি প্রতিক্রিয়া পাবেন:
{
"ok": true
}
CouchDB ডকুমেন্ট তৈরি করার জন্য POST রিকুয়েস্ট ব্যবহার করা হয়। একটি ডকুমেন্ট JSON ফরম্যাটে তৈরি এবং ডেটাবেসে ইনসার্ট করা হয়।
http://<server_ip>:<port>/<db_name>
POST
ধরা যাক আপনি mydatabase
ডেটাবেসে একটি নতুন ডকুমেন্ট তৈরি করতে চান, এবং ডকুমেন্টের মধ্যে একটি নাম এবং বয়স থাকবে।
curl -X POST http://127.0.0.1:5984/mydatabase -H "Content-Type: application/json" -d '{
"name": "John Doe",
"age": 30
}'
এটি একটি নতুন ডকুমেন্ট তৈরি করবে, এবং আপনি এই ধরনের প্রতিক্রিয়া পাবেন:
{
"id": "some_unique_id",
"rev": "1-xxxxxxx"
}
এখানে id
ডকুমেন্টের ইউনিক আইডি এবং rev
ডকুমেন্টের সংস্করণ।
CouchDB ডকুমেন্ট আপডেট করতে, প্রথমে সংশ্লিষ্ট ডকুমেন্টের _id এবং _rev প্রয়োজন হয়। এই তথ্য ব্যবহার করে আপনি PUT রিকুয়েস্ট পাঠিয়ে ডকুমেন্টের ডেটা আপডেট করতে পারেন।
http://<server_ip>:<port>/<db_name>/<doc_id>
PUT
ধরা যাক আপনার mydatabase
ডেটাবেসে একটি ডকুমেন্ট রয়েছে যার _id some_unique_id
এবং _rev 1-xxxxxxx
। আপনি ডকুমেন্টের নাম এবং বয়স আপডেট করতে চান।
curl -X PUT http://127.0.0.1:5984/mydatabase/some_unique_id -H "Content-Type: application/json" -d '{
"name": "John Doe",
"age": 31,
"_rev": "1-xxxxxxx"
}'
এটি ডকুমেন্টের age আপডেট করবে এবং নতুন _rev প্রদান করবে।
CouchDB ডকুমেন্ট মুছে ফেলতে হলে, প্রথমে সংশ্লিষ্ট ডকুমেন্টের _id এবং _rev এর প্রয়োজন হয়। এরপর DELETE রিকুয়েস্ট পাঠিয়ে ডকুমেন্ট মুছে ফেলা হয়।
http://<server_ip>:<port>/<db_name>/<doc_id>
DELETE
ধরা যাক আপনি mydatabase
ডেটাবেসের একটি ডকুমেন্ট মুছে ফেলতে চান, যার _id some_unique_id
এবং _rev 2-yyyyyy
।
curl -X DELETE http://127.0.0.1:5984/mydatabase/some_unique_id?rev=2-yyyyyy
এটি ডকুমেন্টটি মুছে ফেলবে এবং সফল হলে নিচের মতো একটি প্রতিক্রিয়া পাবেন:
{
"ok": true
}
CouchDB এর HTTP API একটি শক্তিশালী উপায় যা ডেটাবেস এবং ডকুমেন্টের পরিচালনা, যেমন তৈরি, আপডেট, ডিলিট ইত্যাদি কার্যক্রমকে সহজ করে। HTTP রিকুয়েস্টের মাধ্যমে, আপনি CouchDB এর সাথে যোগাযোগ করতে পারেন এবং JSON ডেটার মাধ্যমে ডেটাবেসের তথ্য পরিচালনা করতে পারেন। RESTful API ব্যবহারের মাধ্যমে এটি ডেভেলপারদের জন্য একটি অত্যন্ত নমনীয় এবং স্কেলেবল সমাধান প্রদান করে।
CouchDB এর RESTful API ব্যবহার করে বিভিন্ন ডেটাবেস এবং ডকুমেন্টের উপর কার্যকরী কাজ করা যায়। এই API গুলো ডেটাবেস এবং ডকুমেন্টের অবস্থা দেখতে এবং তাদের মধ্যে পরিবর্তন ট্র্যাক করতে সাহায্য করে। নিচে _all_dbs
, _all_docs
, এবং _changes
API গুলোর বিস্তারিত আলোচনা করা হলো।
_all_dbs
API_all_dbs
API ব্যবহার করে CouchDB সার্ভারে উপলব্ধ সকল ডেটাবেসের তালিকা পাওয়া যায়। এটি খুবই কার্যকরী যখন আপনি সার্ভারে কতগুলি ডেটাবেস আছে তা দেখতে চান।
GET /_all_dbs
GET /_all_dbs
প্রত্যাবর্তিত ফলাফল:
[
"db1",
"db2",
"db3"
]
_all_docs
API_all_docs
API ব্যবহার করে একটি নির্দিষ্ট ডেটাবেসের সকল ডকুমেন্টের তালিকা পাওয়া যায়। এটি একটি ডেটাবেসে সংরক্ষিত সমস্ত ডকুমেন্টের _id, _rev, এবং অন্যান্য মেটাডেটা প্রদান করে।
GET /{database}/_all_docs
GET /mydb/_all_docs
প্রত্যাবর্তিত ফলাফল:
{
"rows": [
{
"id": "doc1",
"key": "doc1",
"value": {
"rev": "1-967a00dff5e02add41819138abb7f4f8"
}
},
{
"id": "doc2",
"key": "doc2",
"value": {
"rev": "2-9c97b3c930f3548f522dcd90f93a4d28"
}
}
]
}
id
এবং rev
) প্রদান করা হয়।limit
এবং skip
প্যারামিটার ব্যবহার করে আপনি রেকর্ডের পরিসীমা নির্ধারণ করতে পারেন।include_docs=true
প্যারামিটার ব্যবহার করে ডকুমেন্টের পূর্ণ তথ্য (অথবা কন্টেন্ট) দেখতে পারেন।GET /mydb/_all_docs?include_docs=true
প্রত্যাবর্তিত ফলাফল:
{
"rows": [
{
"id": "doc1",
"key": "doc1",
"doc": {
"_id": "doc1",
"_rev": "1-967a00dff5e02add41819138abb7f4f8",
"name": "John",
"age": 30
}
},
{
"id": "doc2",
"key": "doc2",
"doc": {
"_id": "doc2",
"_rev": "2-9c97b3c930f3548f522dcd90f93a4d28",
"name": "Jane",
"age": 25
}
}
]
}
_changes
API_changes
API CouchDB ডাটাবেসে সমস্ত পরিবর্তনের (insert, update, delete) একটি তালিকা প্রদান করে। এটি changes feed
হিসেবে পরিচিত এবং এটি খুবই উপকারী যখন আপনি একটি ডেটাবেসের উপর ট্র্যাকিং করতে চান যে কখন এবং কী ধরনের পরিবর্তন হয়েছে।
GET /{database}/_changes
GET /mydb/_changes
প্রত্যাবর্তিত ফলাফল:
{
"results": [
{
"seq": "1-g1o7h4",
"id": "doc1",
"changes": [
{
"rev": "1-967a00dff5e02add41819138abb7f4f8"
}
]
},
{
"seq": "2-g1o7h5",
"id": "doc2",
"changes": [
{
"rev": "2-9c97b3c930f3548f522dcd90f93a4d28"
}
]
}
]
}
seq
: পরিবর্তনের সিকোয়েন্স নম্বর।id
: সংশ্লিষ্ট ডকুমেন্টের ID।changes
: পরিবর্তনের রিভিশন।since
প্যারামিটার ব্যবহার করে পূর্বের নির্দিষ্ট স্থান থেকে পরিবর্তন দেখতে পারেন।feed
প্যারামিটার (longpoll, continuous, normal) ব্যবহার করে আপনি একাধিক পরিবর্তন দেখতে পারেন।GET /mydb/_changes?feed=continuous
এই কনফিগারেশন ডেটাবেসের উপর লাইভ পরিবর্তন ট্র্যাক করতে সক্ষম।
_all_dbs
API: সমস্ত ডেটাবেসের নামের একটি তালিকা প্রদান করে।_all_docs
API: নির্দিষ্ট ডেটাবেসের সমস্ত ডকুমেন্টের তালিকা এবং মেটাডেটা প্রদান করে।_changes
API: ডেটাবেসের পরিবর্তনের ইতিহাস বা পরিবর্তন সিকোয়েন্স ট্র্যাক করতে সাহায্য করে।এই API গুলো CouchDB এর সাথে ইন্টিগ্রেশন এবং ডেটাবেস পরিচালনার জন্য অত্যন্ত কার্যকরী, বিশেষত যখন আপনি ডেটাবেসের উপর নিরীক্ষণ করতে চান বা পরিবর্তন ট্র্যাক করতে চান।
common.read_more